/* 自定义webpack打包规则 */
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { CleanWebpackPlugin } = require('clean-webpack-plugin')
module.exports = {
    /* 
设置环境模式
    获取环境变量 process.env.NODE_EVN
    production生产环境：打包后的JS会自动压缩、NODE_EVN=“production”
    development开发环境：代码不会压缩、NODE_EVN="development"
*/
    mode: 'production',
    /* 指定入口[相对地址] */
    entry: './src/index.js',
    /* 指定出口 */
    output: {
        //打包后文件的名字
        //[hash]/[hash:8]:为打包后的文件创建哈希名
        // + 代码一但被修改，生成的文件名中的哈希值也会变化
        // + 有助于强缓存的设置
        filename: 'main.[hash:8].js',
        //设置打包的路径[绝对路径]
        path: path.resolve(__dirname, './dist')
    },
    plugins: [
        new HtmlWebpackPlugin({
            //指定页面模版
            template: './public/index.html',
            //打包文件后的名字
            filename: 'index.html',
            //是否压缩
            minify: true
        }),
        new CleanWebpackPlugin()
    ],
    /* DEV-SERVER */
    devServer: {
        host: '127.0.0.1',//域名
        port: 3000,//端口号
        open: true,//自动打开浏览器
        hot: true,//热更新
        compress: true,//开启服务器端端GZIP压缩
        /* 
            跨域代理
                "/xxx" 前缀：主要就是用来区分，以“什么前缀发的请求，我们代理到哪一台服务器上[一般设置为/api]”
                target:代理的真正服务器地址
                pathRewrite:地址重写，主要用于把用来区分不同代理的前缀，从最后请求的真正地址中移除掉
                changeOrigin:修改请求头中的origin源信息
                ws:支持webscoket通信机制
         */
        proxy: [
            {
                context: ['/jian'],
                target: 'https://www.jianshu.com/',
                changeOrigin: true,
                ws: true,
                pathRewrite: { '^/jian': '' }
            },
            {
                context: ['/zhi'],
                target: 'https://news-at.zhihu.com/api/4',
                changeOrigin: true,
                ws: true,
                pathRewrite: { '^/zhi': '' }
            }
        ]
    }
}